import pandas as pd
df = pd.read_csv('data/drugs.csv').sort_values([
     'State','COUNTY','SubstanceName'],ignore_index=True)
'''
由上述可知 变换是把yyyy index 变成cloumns
长表变为宽表所以用pivot 函数 重新生成索引 把yyyy 重名命名
'''
res = df.pivot(index=['State','COUNTY','SubstanceName'
              ], columns='YYYY', values='DrugReports'
              ).reset_index().rename_axis(columns={'YYYY':''})
'''
宽表变长表使用melt 函数 总共8列，变成yyyy 的colums 的值 然后 现在的值变成DrugReports 为columns的值，并
'''
res_melted = res.melt(id_vars = ['State','COUNTY','SubstanceName'],
                     value_vars = res.columns[-8:],
                     var_name = 'YYYY',
                     value_name = 'DrugReports').dropna(
                     subset=['DrugReports'])
'''
按 State 分别统计每年的报告数量总和，其中 State, YYYY 分别为列索引和行索引，要求分别使用 pivot_table 函数与 groupby+unstack 两种不同的策略实现，并体会它们之间的联系
'''
res = df.pivot_table(index='YYYY', columns='State',
                     values='DrugReports', aggfunc='sum')
'''
先分组后行索引变列索引
'''
res = df.groupby(['State', 'YYYY'])['DrugReports'].sum(
                ).to_frame().unstack(0).droplevel(0,axis=1)

df = pd.DataFrame({'Class':[1,2],
                  'Name':['San Zhang', 'Si Li'],
                  'Chinese':[80, 90],
                  'Math':[80, 75]})

df_melted = df.melt(id_vars = ['Class', 'Name'],
                    value_vars = ['Chinese', 'Math'],
                    var_name = 'Subject',
                    value_name = 'Grade')

pd.wide_to_long(df,
                stubnames=['pre'],
                i = ['Class', 'Name'],
                j='Subject',
                sep='_',
                suffix='.+').reset_index().rename(columns={'pre':'Grade'})